import { NestInterceptor, ExecutionContext, CallHandler } from "@nestjs/common";
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export interface Response<T> {
    data: T;
}

// 实现拦截器接口
export class ResponesInterceptor<T> implements NestInterceptor<T, Response<T>> {
    // 实现拦截器接口中的拦截方法
    intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {

        // 使用数据管道流，用map进行数据的转换
        return next.handle().pipe(map(data => ({
            message: 'success',
            code: 200,
            data: data ?? null,
            time: Date.now()
        })));
    }
}